package cn.psvmc.cxzapi.service.order;

import cn.psvmc.cxzapi.mapper.order.TOrderLogMapper;
import cn.psvmc.cxzapi.model.common.OrderEntity;
import cn.psvmc.cxzapi.model.order.TOrderLog;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * @author ywx
 * @className TOrderLogService
 * @description 订单日志服务类
 * @date 2025/1/4 17:50
 **/
@Service
public class TOrderLogService {
    @Resource
    private TOrderLogMapper orderLogMapper;

    /**
     * @Description 保存订单日志
     * 1、使用 @Transactional(propagation = Propagation.REQUIRES_NEW): 这样在发生异常时，它将会在一个新的事务中执行，从而不会被外部事务影响。
     * 2、确保 saveOrderLog 方法是通过 Spring 容器进行调用的，而不是直接在同一个类中调用。因为 Spring 事务管理仅在通过 Spring 代理的方法调用时生效。
     * 3、创建一个新的服务类来处理日志记录。这将确保调用 saveOrderLog 是新的代理生效。
     * @Date 2025/1/4 18:10
     * @Author YWX
     * @Param [orderLog]
     * @Return void
     **/
    //@Transactional(propagation = Propagation.REQUIRES_NEW)
    public void saveOrderLog(TOrderLog orderLog) {
        orderLogMapper.insert(orderLog);
    }

    //保存订单日志
    public void saveOrderLog2(TOrderLog orderLog) {
        orderLogMapper.insert(orderLog);
    }

    //批量保存订单日志
    public void batchSaveOrderLog(List<TOrderLog> logList) {
        orderLogMapper.insertBatchSomeColumn(logList);
    }

    //日志列表
    public IPage<Map<String, Object>> listAll(Page<TOrderLog> iPage, OrderEntity entity) {
        return orderLogMapper.listAll(iPage, entity);
    }

    //获取最后一条日志
    public Object getLastLogByOrderCode(Object orderCode) {
        return orderLogMapper.getLastLogByOrderCode(orderCode);
    }
}
